<?php

// UDP 服务端
class UDPServer
{
    private $server;

    public function __construct($port = 9511)
    {
        $this->server = new Swoole\Server('127.0.0.1', $port, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
        // 设置参数
        $this->server->set([
            'worker_num'    => 4,// 进程数, cpu 核心数的 2 或 4 倍
            'max_request'   => 50,// 最大请求数
        ]);
        // 监听事件
        $this->server->on('Packet', [$this, 'onPacket']);
        // 启动服务
        $this->server->start();
    }

    /**
     * 服务端接收消息事件
     * @param \Swoole\Server $server UDP 异步服务端对象
     * @param mixed $data 接收到的数据
     * @param array $clientInfo 客户端信息
     */
    public function onPacket(Swoole\Server $server, $data, $clientInfo)
    {
        echo '接收到客户端数据:' . $data;
        print_r($clientInfo);
        // 向客户端发送数据
        $server->sendto($clientInfo['address'], $clientInfo['port'], '接收到客户端数据: ' . $data . PHP_EOL);
    }
}